<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // class类的写法
        class Anim{
            constructor(name,age){
                this.name=name;
                this.age=age;
            }
            // 在原型上添加属性或方法
            num(){
                console.log('有多少种动物');
            }
            // 在Anim自身上添加静态属性或方法
            static pise(){
                console.log('动物的皮色有多少种');
            }
        }

        // 子类的写法
        class dog extends Anim{  //extends继承  super接收
            constructor(name,age){
                super(name,age);
            }
            // 在子类的原型方法种调用父类原型上的方法 但是不可以调用父类自身上的方法
            num_dog(){
                console.log('num_dog');
                super.num();
            }
            // 在子类的自身方法中调用父类自身上的方法 但是不可以调用父类原型上的方法
            num_pise(){
                console.log('num_pise');
                super.pise();
            }
        }

        // 想要调用原型对象上的方法  new该子类  创建实例对象 使用实例对象.原型方法使用
        let xiaogou=new dog('xiaogou',2);
        xiaogou.num_dog();
        console.log(xiaogou);

        /* 
        class类继承通过extends进行继承，通过super进行接收
        super可以是函数  也可以是对象
        在构造器（constructor）中，super作为函数进行接收，把父类中的属性和方法传递给子类
        在子类的静态方法中，super作为对象调用，继承父类静态方法，不能继承父类原型对象上的方法
        在子类的原型对象上的方法中，super作为对象调用，继承父类原型对象上的方法，不能继承父类静态方法
        */
    </script>
</body>
</html>